package com.rzjm.api.util;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @创建者：zhouwei
 * @创建时间：2021/9/29
 * @描述：
 */
public class MathUtil {

	/**
	 * 2个 Int 类型数字 相除 保留2位小数
	 *
	 * @param a
	 * @param b
	 * @return
	 */
	public static double getDoubleByInt(long a, long b) {
		DecimalFormat df = new DecimalFormat("0.00");
		String num = "0.00";
		if (b > 0) {
			float f = (float) a / b;
			num = df.format(f);
		}
		return Double.parseDouble(num);
	}




	/**
	 *  获取 涓流数据的斜率
	 * @param powerList
	 * @return
	 */
	public static double getPowerSlope(List<Double> powerList){
		double slope = 100d;
//		LinearRegression linearRegression1 = new LinearRegression();
		int i = 0;
		Map<Double, Double> initData = new HashMap<>();
		for (Double power : powerList){
			initData.put(Double.parseDouble((i+ 1) + ""), power);
			i++;
		}

//        System.out.println("斜率: " + slope);
//        System.out.println("截距: " + intercept);
		Map<String, Object> map = LinearRegression.initData(initData);
		int code = map.containsKey("code") ? Integer.parseInt(map.get("code").toString()) : 0;
		if(code == 1){
			slope = map.containsKey("slope") ? Double.parseDouble(map.get("slope").toString()) : 100d;
			slope = Math.abs(MathUtil.getDoubleUp(slope));
		}
		return slope;
	}

	/**
	 * 2个 Double 类型数字 相除 保留2位小数
	 *
	 * @param a
	 * @param b
	 * @return
	 */
	public static double getDoubleByD(double a, double b) {
		DecimalFormat df = new DecimalFormat("0.00");
		String num = "0.00";
		if (b > 0) {
			double f = a / b;
			num = df.format(f);
		}
		return Double.parseDouble(num);
	}

	/**
	 *  对当前小数保留2位
	 *
	 * @param a
	 * @return
	 */
	public static double getDouble(double a) {
//		DecimalFormat df = new DecimalFormat("0.00");
//		String num = "0.00";
//		num = df.format(a);
//
////		double d = 114.1464564646;
//		a = (double) Math.round(a * 100) / 100;
//
//		return Double.parseDouble(a+"");
		BigDecimal bg = new BigDecimal(a).setScale(2, RoundingMode.UP);
		return bg.doubleValue();
	}


	/**
	 *  对当前小数保留2位
	 *
	 * @param a
	 * @return
	 */
	public static double getDoubleLow(double a) {
		DecimalFormat df = new DecimalFormat("0.00");
		String num = df.format(a);
		return Double.parseDouble(num);
	}

	public static double getDoubleUp(double a){
		BigDecimal bg = new BigDecimal(a).setScale(2, RoundingMode.HALF_UP);
		return bg.doubleValue();
	}

	/** 保留两位小数，四舍五入的一个老土的方法 */
	public static double formatDouble1(double d) {
		return (double)Math.round(d*100)/100;
	}
	public static double formatDouble2(double d) {
		// 旧方法，已经不再推荐使用
		// BigDecimal bg = new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP);
		// 新方法，如果不需要四舍五入，可以使用RoundingMode.DOWN
		BigDecimal bg = new BigDecimal(d).setScale(2, RoundingMode.UP);
		return bg.doubleValue();
	}
	public static String formatDouble3(double d) {
		NumberFormat nf = NumberFormat.getNumberInstance();

		// 保留两位小数
		nf.setMaximumFractionDigits(2);
		// 如果不需要四舍五入，可以使用RoundingMode.DOWN
		nf.setRoundingMode(RoundingMode.UP);
		return nf.format(d);
	}
	/**这个方法挺简单的 */
	public static String formatDouble4(double d) {
		DecimalFormat df = new DecimalFormat("#.00");
		return df.format(d);
	}
	/**如果只是用于程序中的格式化数值然后输出，那么这个方法还是挺方便的, 应该是这样使用：System.out.println(String.format("%.2f", d));*/
	public static String formatDouble5(double d) {
		return String.format("%.2f", d);
	}

	/**
	 *  对当前小数保留3位
	 *
	 * @param a
	 * @return
	 */
	public static double getDouble3(double a) {
		DecimalFormat df = new DecimalFormat("0.000");
		String num = "0.000";
		num = df.format(a);
		return Double.parseDouble(num);
	}


	/**
	 *  对当前小数保留2位
	 *
	 * @param a
	 * @return
	 */
	public static double getFloat(double a) {
		DecimalFormat df = new DecimalFormat("0.0");
		String num = "0.0";
		num = df.format(a);
		return Double.parseDouble(num);
	}

	/**
	 *  a 占 b 的百分比
	 * @param a
	 * @param b
	 * @return
	 */
	public static String getRatio(long a, long b) {
		DecimalFormat df = new DecimalFormat("0.00");
		String num = "0.00";
		if (b > 0) {
			float f = (float) a / b;
			num = df.format(f*100);
		}
		return num;
	}


	public static void main(String[] args) {
//		double d1 = 10.12;
//		double d2 = 11.123;
////		double d = getDoubleByInt(123,57);
//		double d3 = getDoubleByD(d1,d2);
//		System.out.println(d3);
//
//		double b1 = getDouble(0.125);
//		System.out.println("b1: " + b1);
//
//
//		double d = 114.1464564646;
//		d = (double) Math.round(d * 100) / 100;
//		System.out.println("d: " + d);
//
//
//		double s1 =0.25  / 60 * 13 ;
//		double s2 = getDoubleUp(0.25  / 60 * 13) ;
//		System.out.println("s1: "+ s1);
//		System.out.println("s2: "+ s2);
//
//
//
//		double ddd = getDouble3(3.12362);
//		System.out.println("ddd:" + ddd);
//
//
//		int aa = ((180 * 10) / 12) * 60;
//		System.out.println("aa:" + aa);

		//
//		double everyPower = 300 / 1000;
//
//		double everyMin = 1.00 / 1400.00 / 60;
//		System.out.println("每分钟的充电");
//
//		double b = 1.00 / 1400.00 / 60 * 300 * 60 * 4;
//		System.out.println("b: " + b);



		for(int i = 0; i < 10;i++){
			double a = Math.random() * 100;
			int b = (int)a;
//		System.out.println(" 随机数： a = " + a);
//		System.out.println(" 整数： b = " + b);

			if(b >= 0 && b <= 20){
				System.out.println("一等奖");
			} else if(b >= 21 && b <= 40){
				System.out.println("二等奖");
			} else if(b >= 41 && b <= 60){
				System.out.println("三等奖");
			} else if(b >= 61 && b <= 80){
				System.out.println("四等奖");
			} else if(b >= 81 && b <= 100){
				System.out.println("特等奖");
			}
		}

	}


}
